from faker import Faker
from random import randint
from datetime import datetime
faker1 = Faker(locale='zh_cn')
# 作业：
# 1、编写一个学生方法，产生一堆学生对象（姓名），传入形参控制学生生成数量
def student_obj(num):
    list1 = []
    for i in range(num):
        name = faker1.name()
        list1.append(name)
    return list1
# print(student_obj(5))

# 2、创建一个方法，用来生成普通人必备的信息：姓名、年龄、住址、身份证号、手机号，随机生成20个写入personinfo.txt里
# 格式：姓名：xxx  年龄：xxx 住址：xxx 身份证号：xxx
def person_info():
    list1 = []
    for i in range(20):
        name = faker1.name()
        age = randint(18,65)
        address = faker1.address()
        ssn = faker1.ssn(min_age = 18,max_age=65)
        phone = faker1.phone_number()
        str_obj = f"姓名：{name}，年龄：{age}，住址：{address}，身份证号：{ssn}，手机号码：{phone}\n"
        list1.append(str_obj)
    with open('person.txt','w',encoding='utf-8') as f:
        f.writelines(list1)
"""person_info()
with open('person.txt','r',encoding='utf-8') as f:
    print(f.read())"""

# 3、文本 student.txt中包含下面的内容
# zhangshan:30
# lisi:50
# wangwu:60
# lifei:70
# 期望能够统计出其中的内容，以dict的形式保存，例如： {"zhangshan":30,"lisi":50,"wangwu":60,"lifei":70}
def file_d():
    dict_obj = {}
    with open('student.txt','r',encoding='utf-8') as f:
        for line in f.readlines():
            """
            按照每一行进行遍历
            """
            key_value = line.strip().split(":") # 根据每一行的文件内容，把空格去掉，之后按照:分割
            dict_obj[key_value[0]] = int(key_value[1]) # 第一个元素就是key，第二个索引元素就是value
    return dict_obj
# print(file_d())

# 4、给你一个 非空 整数数组 nums ，除了某个元素只出现一次以外，其余每个元素均出现两次。找出那个只出现了一次的元素
def isNotNone_list(obj_list:list):
    for i in obj_list:
        if obj_list.count(i) == 1:
            return i
# list1 = [1,1,2,2,3,3,4,5,6,4,5,6,99,109,109]
# print(isNotNone_list(list1)) # 99
# 5、输入：["1","a","b","3","5","8","_"] 想要提取里面得数字，并保存到一个列表中
def get_numList(obj:list)->list:
    result = []
    for i in obj:
        if i in "0123456789":
            result.append(i)
    return result
# print(get_numList(["1", "a", "b", "3", "5", "8", "_"]))

# 6、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
# 用户通过input输入这4个内容(支持持续输入,Q或q退出),并传递给函数，函数接收到这些内容,将其追加到student_msg文件中
def person_info4():
    result = [] # 定义收集结果的列表，方便后续一次性写入
    while True:
        name = input("请输入姓名：")
        if name!="q" and name !='Q':
            pass
        else:
            print("停止写入，结束本次输入内容")
            break
        age = input("请输入年龄：")
        if age !="q" and age !='Q':
            pass
        else:
            print("停止写入，结束本次输入内容")
            break
        address = input("请输入地址：")
        if address!="q" and address !='Q':
            pass
        else:
            print("停止写入，结束本次输入内容")
            break
        sex = input("请输入性别：")
        if sex:
            pass
        else:
            sex = "男"
        if sex!="q" and sex !='Q':
            pass
        else:
            print("停止写入，结束本次输入内容")
            break
        str_obj = f"姓名为：{name}，性别为：{sex}，年龄为：{age}，地址为：{address}"
        result.append(str_obj)
    with open("student_msg.txt",'w',encoding='utf-8') as f:
        f.writelines(result)
"""person_info4()
with open("student_msg.txt", 'r', encoding='utf-8') as f:
    print(f.read())"""
def per_info4(name,age,address,sex="男"):
    with open("student_msg1.txt",'a',encoding='utf-8') as f:
        f.write(f"姓名为：{name}，性别：{sex}，年龄：{age}，地址为：{address}\n")
        print("追加写入成功！")
# ============================函数外==================================================
"""while True:
    name = input("请输入姓名：")
    if name == 'q' or name == 'Q':
        print("停止新增")
        break
    age = input("请输入年龄：")
    if age == 'q' or age == 'Q':
        print("停止新增")
        break
    address = input("请输入地址：")
    if address == 'q' or address == 'Q':
        print("停止新增")
        break
    sex = input("请输入性别：")
    if sex == 'q' or sex == 'Q':
        print("停止新增")
        break
    if sex: # 判断它的布尔值，如果是True的话，就走到这里，说明用户有新增信息
        per_info4(name,age,address,sex)
    else:# 不传递sex，默认让他写入为男
        per_info4(name,age,address) # 调用方法新增
with open('student_msg1.txt','r',encoding='utf-8') as f:
    print(f.read())"""

# 7、打印功能菜单、添加学生信息、删除学生信息、修改学生信息、显示学生信息、退出系统，并且需要接收用户的输入，在根据输入内容调用相应函数实现相应功能（存入文件），模板图如下。每次对学生管理系统发生改动，
# 要写入改动点到log.txt文本中
"""def student_system():
    while True:
        print("欢迎来到学生管理系统！")
        print("全部的功能菜单如下：")
        print("①：添加学生信息")
        print("②：删除学生信息")
        print("③：修改学生信息")
        print("④：显示学生信息")
        print("⑤：退出系统")
        s = input("请输入要操作的序号：")
        if s == "1":
            sid = input("请输入学生学号：")
            with open("stu.txt", 'r', encoding='utf-8') as f:
                all_data = f.read() # 拿到所有的数据
            if f"学生学号：{sid}" not in all_data: # 如果学号不在这里面
                name = input("请输入学生姓名：")
                class_name = input("请输入学生班级：")
                m = input("请输入学生专业：")
                add = input("请输入学生家庭地址：")
                pho = input("请输入学生手机号码：")
                with open("stu.txt",'a',encoding='utf-8') as f:
                    f.write(f"学生学号：{sid}，学生姓名：{name}，学生班级：{class_name}，学生专业：{m}，学生家庭地址：{add}，学生手机号码：{pho}\n")
                with open('log.txt','a',encoding='utf-8') as f:
                    f.write(f"在：{datetime.now()}时，新增为：学生学号：{sid}，学生姓名：{name}，学生班级：{class_name}，学生专业：{m}，学生家庭地址：{add}，学生手机号码：{pho}\n")
            else:
                print("学生学号已经存在了，无法新增！")
                with open('log.txt','a',encoding='utf-8') as f:
                    f.write(f"在：{datetime.now()}时，新增失败：学生学号已经存在了，无法新增！\n")
        elif s =="2":
            sid = input("请输入您要删除的学生学号信息：")
            with open("stu.txt", 'r', encoding='utf-8') as f:
                all_data = f.read() # 拿到所有的数据
            if f"学生学号：{sid}" not in all_data:
                print("学生学号不存在，删除失败！")
                with open('log.txt','a',encoding='utf-8') as f:
                    f.write(f"在：{datetime.now()}时，删除失败：学生学号不存在，删除失败！\n")
            else:
                with open('stu.txt','r',encoding='utf-8') as f:
                    list1 = f.readlines() # 拿到所有的列表
                with open('stu.txt','w',encoding='utf-8') as f: # 用w的方式直接做替换
                    for i in list1: # 遍历每一行的内容
                        if f"学生学号：{sid}" in i: # 如果找到了某一个是我要删除的了
                            list1.remove(i) # 用列表的删除方式，直接删除掉
                            print("删除成功！")
                            break
                    f.writelines(list1) # 再用写入的方式，把他写进入
                    with open('log.txt', 'a', encoding='utf-8') as f:
                        f.write(f"在：{datetime.now()}时，删除内容为：学生学号：{sid}成功！\n")
        elif s =="3":
            sid = input("请输入要修改的学生学号：")
            with open("stu.txt", 'r', encoding='utf-8') as f:
                all_data = f.read() # 拿到所有的数据
            if f"学生学号：{sid}" not in all_data:
                print("无法修改学生信息，学号不存在！")
                with open('log.txt','a',encoding='utf-8') as f:.
                    f.write(f"在：{datetime.now()}时，修改失败：学生学号不存在，修改失败！\n")
            else:
                name = input("请输入学生姓名：")
                class_name = input("请输入学生班级：")
                m = input("请输入学生专业：")
                add = input("请输入学生家庭地址：")
                pho = input("请输入学生手机号码：")
                with open('stu.txt','r',encoding='utf-8') as f:
                    list1 = f.readlines() # 拿到所有的列表
                    for i in list1:  # 遍历每一行的内容
                        if f"学生学号：{sid}" in i:  # 如果找到了某一个是我要修改的了
                            list1.remove(i)
                str_obj = f"学生学号：{sid}，学生姓名：{name}，学生班级：{class_name}，学生专业：{m}，学生家庭地址：{add}，学生手机号码：{pho}\n"
                list1.append(str_obj)
                with open('stu.txt','w',encoding='utf-8') as f:
                    f.writelines(list1)
                    print(f"修改学生学号为：{sid}；信息修改成功：学生姓名：{name}，学生班级：{class_name}，学生专业：{m}，学生家庭地址：{add}，学生手机号码：{pho}")
                with open('log.txt','a',encoding='utf-8') as f:
                    f.write(f"在：{datetime.now()}时，修改为：学生学号：{sid}，学生姓名：{name}，学生班级：{class_name}，学生专业：{m}，学生家庭地址：{add}，学生手机号码：{pho}\n")
        elif s =="4":
            print("显示所有的学生信息：")
            with open('stu.txt','r',encoding='utf-8') as f:
                all_data = f.readlines()
                if all_data:
                    for index,line in enumerate(all_data):
                        print(f"第{index+1}的学生信息为：{line}")
                else:
                    print("学生信息为空，请您抓紧添加吧！")
        elif s =="5":
            print("欢迎下次光临学生管理系统！")
            print("再见！")
            break
student_system()"""
"""sid = input("请输入学生学号：")
with open("stu.txt",'r',encoding='utf-8') as f:
    all_data = f.read() # 所有的数据
if f"学生学号：{sid}" not in all_data: # 判断在不在
    print("不在")
else:
    print('在')"""



# 8、如今的社交软件层出不穷，虽然功能千变万化，但都具有好友管理系统的基本功能，包括添加好友、删除好友、备注好友、展示好友等。下面是一个简单的好友管理系统的功能菜单（存入文件）
# 好友管理系统中有5个功能，每个功能都对应一个序号，用户可根据提示“请输入您的选项”选择序号执行相应的操作，包括：
# 添加好友：用户根据提示“请输入要添加的好友：”输入要添加好友的姓名，添加后会提示“好友添加成功”。
# 删除好友：用户根据提示“请输入删除好友姓名：”输入要删除好友的姓名，删除后提示“删除成功”
# 备注好友：用户根据提示“请输入要修改的好友姓名：”和“请输入修改后的好友姓名：”分别输入修改前和修改后的好友姓名，修改后会提示“备注成功”。
# 展示好友：若用户还没有添加过好友，提示“好友列表为空”，否则返回每个好友的姓名。
# 退出：关闭好友管理系统。
# 本任务要求编写程序，模拟实现如上所述的好友管理系统。